package com.sunday.common.statemachine.study.e1_base;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.statemachine.StateMachine;
import reactor.core.publisher.Mono;

import java.util.EnumSet;
import java.util.Scanner;

/**
 * <a href="https://docs.spring.io/spring-statemachine/docs/4.0.0/reference/index.html#glossary">...</a>
 * <p>
 * 词汇表
 * <p>
 * State Machine（状态机）
 * 驱动状态集合的主要实体，以及区域 transitions 和 events 的 Transitions 和 Events。
 * <p>
 * State(状态)
 * 状态 （state） 模拟了某些不变条件 holds。状态是状态机的主要实体，状态会发生变化 由事件驱动。
 * <p>
 * Extended State(扩展状态)
 * 扩展状态是保存在状态中的一组特殊变量 machine 来减少所需状态的数量。
 * <p>
 * Transition(过渡)
 * 过渡是源状态和目标之间的关系 state。它可能是复合转换的一部分，该转换采用状态 machine 从一个 state 配置切换到另一个 state 配置，表示完整的 状态机对 特定类型。
 * <p>
 * Event(事件)
 * 一个实体，它被发送到状态机，然后驱动各种 状态更改。
 * <p>
 * Initial State(初始状态)
 * 状态机启动的特殊状态。初始状态为 始终绑定到特定的状态机或区域。状态 具有多个区域的计算机可能具有多个初始状态。
 * <p>
 * End State(结束状态)
 * （也称为最终状态。一种特殊的状态表示 表示封闭区域已完成。如果封闭区域为 直接包含在状态机和 state machine 也都已完成，则整个 state 机器完成。
 * <p>
 * History State(历史记录状态)
 * 一个伪状态，让状态机记住它的最后一个 active 状态。存在两种类型的历史状态：浅层（即 仅记住顶级状态）和 deep（记住 子机器）。
 * <p>
 * Choice State(选择状态)
 * 一个伪状态，允许根据 （例如） 事件标头或扩展状态变量。
 * <p>
 * Junction State(交汇点状态)
 * 一个伪状态，它与 choice state 相对相似，但允许 多个传入过渡，而 choice 只允许一个传入 过渡。
 * <p>
 * Fork State(分叉状态)
 * 一种伪状态，用于受控地进入区域。
 * <p>
 * Join State(加入状态)
 * 一种伪状态，它提供对区域的受控退出。
 * <p>
 * Entry Point(入场点)
 * 允许受控进入 submachine的伪状态。
 * <p>
 * Exit Point(退出点)
 * 允许从子机中受控退出的伪状态。
 * <p>
 * Region(地区)
 * 区域是复合状态或状态的正交部分 机器。它包含状态和转换。
 * <p>
 * Guard(警卫)
 * 根据 扩展状态变量和事件参数。守卫条件影响 通过启用 actions 或 transitions 实现状态机的行为 仅当他们评估时禁用他们 自。TRUEFALSE
 * <p>
 * Action(行动)
 * 操作是在触发 过渡。
 */

/**
 * 模块
 * 下表描述了可用于 Spring Statemachine 的模块。
 * <p>
 * 模块	描述
 * spring-statemachine-core
 * <p>
 * Spring Statemachine 的核心系统。
 * <p>
 * spring-statemachine-recipes-common
 * <p>
 * 不需要核心之外依赖项的常见配方 框架。
 * <p>
 * spring-statemachine-kryo
 * <p>
 * KryoSpring Statemachine 的序列化器。
 * <p>
 * spring-statemachine-data-common
 * <p>
 * 的通用支持模块 。Spring Data
 * <p>
 * spring-statemachine-data-jpa
 * <p>
 * 的支持模块 。Spring Data JPA
 * <p>
 * spring-statemachine-data-redis
 * <p>
 * 的支持模块 。Spring Data Redis
 * <p>
 * spring-statemachine-data-mongodb
 * <p>
 * 的支持模块 。Spring Data MongoDB
 * <p>
 * spring-statemachine-zookeeper
 * <p>
 * 分布式状态机的 Zookeeper 集成。
 * <p>
 * spring-statemachine-test
 * <p>
 * 用于状态机测试的支持模块。
 * <p>
 * spring-statemachine-cluster
 * <p>
 * Spring Cloud Cluster 的支持模块。 请注意，Spring Cloud Cluster 已被 Spring Integration 取代。
 * <p>
 * spring-statemachine-uml
 * <p>
 * 使用 Eclipse Papyrus 进行 UI UML 建模的支持模块。
 * <p>
 * spring-statemachine-autoconfigure
 * <p>
 * Spring Boot 的支持模块。
 * <p>
 * spring-statemachine-bom
 * <p>
 * 物料清单 pom.
 * <p>
 * spring-statemachine-starter
 * <p>
 * Spring Boot 启动器。
 */
@Slf4j
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}
